package com.woniu113.junk.order.client;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniu113.junk.commons.model.Result;
import com.woniu113.junk.order.client.dto.*;
import com.woniu113.junk.order.client.dto.AddressInfoDTO;
import com.woniu113.junk.order.client.dto.AdminInfoDTO;
import com.woniu113.junk.order.client.dto.FindSuitableRiderDTO;
import com.woniu113.junk.order.client.dto.UserInfoDTO;
import com.woniu113.junk.order.client.form.IntegralForm;
import com.woniu113.junk.order.feign.FeignConfig;
import com.woniu113.junk.order.form.orderInfo.ScoreForm;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@FeignClient(name = "junk-user",configuration = FeignConfig.class ,path = "/user")
public interface UserClient {
    /**
     * 查询用户的积分信息.
     *
     * @param userId 用户的 ID
     * @return Result<UserInfoDTO> 返回包含用户积分信息的数据传输对象
     */
    @GetMapping("/userInfo/selectIntegral")
    public Result<UserInfoDTO> selectIntegral(@RequestParam("userId") Integer userId);

    /**
     * 根据地址 ID 查询地址信息.
     *
     * @param addressId 地址的 ID
     * @return Result<AddressInfoDTO> 返回包含地址信息的数据传输对象
     */
    @GetMapping("/addressInfo/addressById")
    public Result<AddressInfoDTO> addressById(@RequestParam("addressId") Integer addressId);

    /**
     * 根据管理员 ID 查询管理员信息.
     *
     * @param adminId 管理员的 ID
     * @return Result<AdminInfoDTO> 返回包含管理员信息的数据传输对象
     */
    @GetMapping("/adminInfo/selectAdminById")
    public Result<AdminInfoDTO> selectAdminById(@RequestParam("adminId") Integer adminId);

    /**
     * 根据用户 ID 减少信誉分.
     *
     * @param form 包含用户 ID 和减少的信誉分数信息的请求体
     * @return Result 返回操作结果，包含成功或失败的状态信息
     */
    @PostMapping("/userInfo/reduceScore")
    public Result reduceScore(@RequestBody ScoreForm form);

    /**
     * 查询当前站点全部骑手小哥的分页信息的接口
     *
     * @param dto 包含查询条件的 DTO 对象
     * @return 返回包含骑手信息的分页结果
     */
    @PostMapping("/adminInfo/findByStationId")
    public Result<Page<AdminInfoDTO>> findByStationId(@RequestBody FindSuitableRiderDTO dto);

    @GetMapping("/adminInfo/selectAdminByAdminName")
    @ApiOperation("根据管理员名查询管理员信息")
    public Result<AdminInfo> selectAdminByAdminName(@RequestParam("adminName") String adminName);

    /**
     * 修改用户积分(减少)
     * */
    @PostMapping("/userInfo/reduceIntegralById")
    public Result reduceIntegralById(@RequestBody IntegralForm form);

    /**
     * 查询符合条件的骑手
     * */
    @PostMapping("/adminInfo/findAdmin")
    @ApiOperation("查询符合条件的骑手")
    Result<List<AdminInfoDTO>> findAdmin(@RequestBody FindAdminDTO dtos);

    @GetMapping("/userInfo/selectUserById")
    @ApiOperation("通过id查询用户信息(无条件)")
    public Result<UserInfoDTO> selectUserById(@RequestParam("userId") Integer userId);

    /**
     * 修改用户积分(增加)
     * */
    @PostMapping("/userInfo/addIntegralById")
    @ApiOperation("根据用户id增加积分")
    public Result addIntegralById(@RequestBody IntegralForm form);


}
